package org.opens.config;

import org.opens.interceptor.TokenInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 说明:
 *      这个配置类定义了如何请求静态资源.
 * 注意:
 *      1. 如果开启了这个bean的注册, 在页面上需要以绝对路径方式请求静态资源;
 *      ```
 *      <script src="/static/jquery-3.4.1.js"></script>
 *      ```
 *      2. 如果不开启这个bean的注册, 则可以在任意页面上可以使用下面的这种方式请求:
 *          - 这种方式更加灵活, 但是也写的更多.
 *      ```
 *      <script src="../jquery-3.4.1.js"></script>
 *      ```
 *          - 但是这种方式好像有一个问题就是, 页面跳转的请求层数需要固定, 例如:
 *          ```
 *          设置a页面的请求为: /page/a;
 *          则从a页面跳转到b页面的请求必须为/page/b, 如果为/page/demo/b会导致静态资源找不到, 会自动在url前面加上/page, 最终的请求为: /page/page/demo/b
 *          ```
 */
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Bean
    public TokenInterceptor tokenInterceptor() {
        return new TokenInterceptor();
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 当前项目的静态资源访问问题
        registry.addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/");

        // 解决swagger页面无法访问
        registry.addResourceHandler("/swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");

        // 解决swagger的js, css文件无法访问
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(tokenInterceptor())
                .addPathPatterns("/idempotence/**");
    }

}
